/*
 *  Openmysee
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#include "stdafx.h"
#include "mmspool.h"

BOOL CMMSPool::AddNewMMS(string strChannel, string strMMSAddr)
{
	HRESULT hr;
    CMMSGraph *pMMS = new CMMSGraph(strChannel, strMMSAddr, &hr) ; 
     

	if(FAILED(hr))
	{
		if(pMMS)
			delete pMMS;

		return FALSE;
	}

	EnterCriticalSection(&m_csList);
	m_listGraph.push_back(pMMS);
	LeaveCriticalSection(&m_csList);

	return TRUE;
}

BOOL CMMSPool::RemoveMMS(string strChannel)
{
	EnterCriticalSection(&m_csList);

	BOOL bFinded = FALSE;
	list<CMMSGraph*>::iterator it = m_listGraph.begin();
	for(; it != m_listGraph.end(); it++) 
	{
		CMMSGraph* temp = *it;
		if(temp->GetChannelName() == strChannel) 
		{
			bFinded = TRUE;
			m_listGraph.erase(it);
			delete temp;
			break;
		}
	}
	LeaveCriticalSection(&m_csList);

	if(bFinded)
		return TRUE;
	else
		return FALSE;
}

BOOL CMMSPool::RunMMS(string strChannel)
{
	EnterCriticalSection(&m_csList);

	if(SUCCEEDED(GetMMSByChannel(strChannel)->Run()))
	{
		LeaveCriticalSection(&m_csList);
		return TRUE;
	}
	else
	{
		LeaveCriticalSection(&m_csList);
		return FALSE;
	}

	LeaveCriticalSection(&m_csList);
}

BOOL CMMSPool::StopMMS(string strChannel)
{
	EnterCriticalSection(&m_csList);
	
	if(NULL ==GetMMSByChannel(strChannel))
		return FALSE;

	if(SUCCEEDED(GetMMSByChannel(strChannel)->Stop()))
	{
		LeaveCriticalSection(&m_csList);
		return TRUE;
	}
	else
	{
		LeaveCriticalSection(&m_csList);
		return FALSE;
	}

	LeaveCriticalSection(&m_csList);
}

BOOL CMMSPool::PauseMMS(string strChannel)
{
	EnterCriticalSection(&m_csList);
     
	if(NULL ==GetMMSByChannel(strChannel))
     return FALSE ;

	if(SUCCEEDED(GetMMSByChannel(strChannel)->Pause()))
	{
		LeaveCriticalSection(&m_csList);
		return TRUE;
	}
	else
	{
		LeaveCriticalSection(&m_csList);
		return FALSE;
	}

	LeaveCriticalSection(&m_csList);
}

MMSGRAPHINFO* CMMSPool::GetMMSGraphInfo(string strChannel)
{
	MMSGRAPHINFO* pMMSInfo = NULL;
	EnterCriticalSection(&m_csList);

	CMMSGraph *pMMSGB = GetMMSByChannel(strChannel);
	if(pMMSGB)
		pMMSInfo = pMMSGB->GetMMSGraphInfo();

	LeaveCriticalSection(&m_csList);

	return pMMSInfo;
}

CMMSGraph* CMMSPool::GetMMSByChannel(string strChannel)
{
	list<CMMSGraph*>::iterator it = m_listGraph.begin();
	for(; it != m_listGraph.end(); it++) 
	{
		CMMSGraph* temp = *it;
		if(temp->GetChannelName() == strChannel) 
			return temp;
	}

	return NULL;
}

void CMMSPool::RemoveAllMMS()
{
	EnterCriticalSection(&m_csList);

	list<CMMSGraph*>::iterator it;
	while(m_listGraph.size() > 0) 
	{
		it = m_listGraph.begin();
		CMMSGraph* temp = *it;
		m_listGraph.erase(it);
		delete temp;
	}
	m_listGraph.clear();

	LeaveCriticalSection(&m_csList);
}
